/*
 * @lc app=leetcode.cn id=2 lang=java
 *
 * [2] 两数相加
 *
 * https://leetcode-cn.com/problems/add-two-numbers/description/
 *
 * algorithms
 * Medium (36.92%)
 * Likes:    4058
 * Dislikes: 0
 * Total Accepted:    361.7K
 * Total Submissions: 979.8K
 * Testcase Example:  '[2,4,3]\n[5,6,4]'
 *
 * 给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
 * 
 * 如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。
 * 
 * 您可以假设除了数字 0 之外，这两个数都不会以 0 开头。
 * 
 * 示例：
 * 
 * 输入：(2 -> 4 -> 3) + (5 -> 6 -> 4)
 * 输出：7 -> 0 -> 8
 * 原因：342 + 465 = 807
 * 
 * 
 */

// @lc code=start
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if (l1 == null || l2 == null) {
            throw new IllegalArgumentException("message");
        }

        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        ListNode t = null;
        do {
            if (t == null) {
                t = l1;
            }else {
                ListNode next = t.next;
                t = next;
            }
            sb1.append(t.val);
        } while (t.next != null);

        t = null;
        do {
            if (t == null) {
                t = l2;
            }else {
                ListNode next = t.next;
                t = next;
            }
            sb2.append(t.val);
        } while (t.next != null);

        long temp = Long.parseLong(sb1.reverse().toString()) + Long.parseLong(sb2.reverse().toString());
        String tempStr = temp + "";
        char[] listArr = tempStr.toCharArray();
        ListNode result = null;
        for (char c : listArr) {
            if(result == null) {
                result =  new ListNode(c-'0');
            }else{
                ListNode tt = new ListNode(c-'0');
                tt.next = result;
                result = tt;
            }
        }

        return result;
    }
}
// @lc code=end

